/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.util.dialog;

import java.awt.Frame;
import java.io.File;
import java.io.FileFilter;
import javax.swing.JFileChooser;

/**
 * Clase estática que da soporte a cuadros de diálogo para la apertura de ficheros
 * o directorios
 * @author jose.revuelta
 */
public class UtilidadesCuadroDialogo {

    /**
     * Abre una nueva ventana para seleccionar carpetas o ficheros.
     * @param modo - int - Acepta los siguientes valores:<br>
     *  - <strong>JFileChooser.FILES_ONLY </strong>: Solo abrirá ficheros.<br>
     *  - <strong>JFileChooser.DIRECTORIES_ONLY</strong> : Solo abrirá directorios.<br>
     *  - <strong>JFileChooser.FILES_AND_DIRECTORIES</strong> : Abira tanto ficheros como directorios<br>
     * @param textoVentana - String - Texto a mostrar en la barra de título.
     * @return Sting - Ruta en la que se encuentra dicho fichero o directorio.
     */
    public static String abrirSelectorArchivo(int modo, String textoVentana) {
        String resultado = "";
        JFileChooser fcAbrirDirectorio = null;
        Frame ventana = new Frame();
        fcAbrirDirectorio = new JFileChooser();
        ventana.setResizable(true);
        fcAbrirDirectorio.setFileSelectionMode(modo);
        fcAbrirDirectorio.showDialog(ventana, textoVentana);
        File fichero = null;
        if(fcAbrirDirectorio.getSelectedFile()!=null){
            fichero = fcAbrirDirectorio.getSelectedFile();
            resultado = fichero.getPath();
        }
        return resultado;
    }

    /**
     * Abre una nueva ventana para seleccionar carpetas o ficheros, filtrando por una lista de estensiones
     * @param modo - int - Acepta los siguientes valores:<br>
     *  - <strong>JFileChooser.FILES_ONLY </strong>: Solo abrirá ficheros.<br>
     *  - <strong>JFileChooser.DIRECTORIES_ONLY</strong> : Solo abrirá directorios.<br>
     *  - <strong>JFileChooser.FILES_AND_DIRECTORIES</strong> : Abira tanto ficheros como directorios<br>
     * @param textoVentana - String - Texto a mostrar en la barra de título.
     * @param extensiones - String[] - Array que contiene las extensiones válidas para filtrar. EJ: "pdf", "exe"
     * @return Sting - Ruta en la que se encuentra dicho fichero o directorio.
     */
    public static String abrirSelectorArchivo(int modo, String textoVentana, String[] extensiones) {
        String resultado = "";
        resultado = abrirSelectorArchivo(modo, textoVentana);
        boolean valido = false;
        valido = resultado != null;
        for (int i = 0; (i < extensiones.length) && !valido; i++) {
            String extension = "." + extensiones[i];
            valido = (extension.contains(extension));
        }
        if (!valido) {
            resultado = "";
        }

        return resultado;
    }

    /**
     * Obiene la extensión e un fichero
     * @param f - File - Fichero del cual se quiere obtener la extensión
     * @return String - Extensión del fichero
     */
    public static String obtenerExtension(File f) {

        String ext = null;
        String s = f.getName();
        int i = s.lastIndexOf('.');

        if (i > 0 && i < s.length() - 1) {
            ext = s.substring(i + 1).toLowerCase();
        }
        return ext;
    }
}
